package com.homework.sensorapplication;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;

public class SensorsActivity extends Activity implements SensorEventListener {
    // 定义模拟器的Sensor管理器
    private SensorManager mSensorManager;
    // 定义界面上的文本框组件
    EditText etTxt1,etTxt2,etTxt3,etTxt4,etTxt5;
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sensors);
        // 获取程序界面的文本框组件
        etTxt1 = (EditText) findViewById(R.id.edit_show1);
        etTxt2 = (EditText) findViewById(R.id.edit_show2);
        etTxt3 = (EditText) findViewById(R.id.edit_show3);
        etTxt4 = (EditText) findViewById(R.id.edit_show4);
        etTxt5 = (EditText) findViewById(R.id.edit_show5);
        // 获取传感器模拟器的传感器管理服务
        mSensorManager =(SensorManager) getSystemService(Context.SENSOR_SERVICE);
        // 连接传感器模拟器
        //mSensorManager.;
    }
    protected void onResume()	{
        super.onResume();
        // 为系统的方向传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的磁场传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的温度传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的光传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的压力传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
                SensorManager.SENSOR_DELAY_GAME);
    }
    protected void onStop()	{
        // 程序退出时取消注册
        mSensorManager.unregisterListener(this);
        super.onStop();
    }
    @Override
    protected void onPause(){
        //程序暂停是取消注册
        mSensorManager.unregisterListener(this);
        super.onPause();
    }
    // 以下是实现SensorEventListener接口必须实现的方法
    // 当传感器的值发生改变时回调该方法
    public void onSensorChanged(SensorEvent event)	{
        float[] values = event.values;
        //获取触发event的传感器类型
        int sensorType=event.sensor.getType();
        StringBuilder sb = null;
        switch(sensorType){
            //方向传感器
            case Sensor.TYPE_ORIENTATION:
                sb=new StringBuilder();
                sb.append("绕X轴转过的角度为：");
                sb.append(values[0]);
                sb.append("\n绕Y轴转过的角度为：");
                sb.append(values[1]);
                sb.append("\n绕Z轴转过的角度为：");
                sb.append(values[2]);
                etTxt1.setText(sb.toString());
            //磁场传感器
            case Sensor.TYPE_MAGNETIC_FIELD:
                sb=new StringBuilder();
                sb.append("X方向上的磁场强度为：");
                sb.append(values[0]);
                sb.append("\nY方向上的磁场强度为：");
                sb.append(values[1]);
                sb.append("\nZ方向上的磁场强度为：");
                sb.append(values[2]);
                etTxt2.setText(sb.toString());
            //温度传感器
            case Sensor.TYPE_AMBIENT_TEMPERATURE:
                sb=new StringBuilder();
                sb.append("当前的温度为：");
                sb.append(values[0]);
                etTxt3.setText(sb.toString());
            //光传感器
            case Sensor.TYPE_LIGHT:
                sb=new StringBuilder();
                sb.append("当前光的强度为：");
                sb.append(values[0]);
                etTxt4.setText(sb.toString());
            //压力传感器
            case Sensor.TYPE_PRESSURE:
                sb=new StringBuilder();
                sb.append("当前的压力为：");
                sb.append(values[0]);
                etTxt5.setText(sb.toString());
        }
    }
    // 当传感器精度改变时回调该方法。
    public void onAccuracyChanged(Sensor sensor, int accuracy)	{
    }
}